package com.ruoyi.project.utils.Serial;

import com.ruoyi.project.system.device.domain.MyDevice;
import com.ruoyi.project.system.device.domain.MyDeviceDetails;
import gnu.io.SerialPort;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static com.ruoyi.project.utils.Serial.SerialPortManager.sendToPort;


public class Main implements Runnable {


    //所有端口
    static ArrayList<String> arrayList = null;
    //打开端口对象
    static SerialPort serialPort;
    // 串口输入流引用
    static InputStream inputStream;
    // 串口输出流引用
    static OutputStream outputStream;

    static ChuanKouListener chuanKouListener;


    //初始化方法
    public void init() {
        //1.查询串口信息
        arrayList = SerialPortManager.findPort();
        String s = "null";
        // 选择串口,默认选择第一个串口
        if(!arrayList.isEmpty()){
            s = arrayList.get(0);
        }

        System.out.println("第一个串口为：" + s);


        //2.打开串口
        try {
            if (serialPort == null) {
                serialPort = SerialPortManager.openPort(s, 115200, SerialPort.DATABITS_8, SerialPort.PARITY_NONE);
                System.out.println("已经打开串口对象！");
            }

            // 3. 设置串口的输入输出流引用
            try {
                inputStream = serialPort.getInputStream();
                outputStream = serialPort.getOutputStream();
            } catch (IOException e) {
                System.out.println("串口输入输出IO异常");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("串口使用异常！");
        }
        //new 一个ChuanKouListener对象。
        chuanKouListener = new ChuanKouListener(inputStream, outputStream);
        // 4.串口不为空时，设置串口监听器
        try {
            if (serialPort != null) {
                SerialPortManager.addListener(serialPort, chuanKouListener);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    int a = 1;
    @Override
    public void run() {
        try {
            System.out.println("串口线程已运行");
//            while (true) {
//                // 如果堵塞队列中存在数据就将其输出
//                if (ChuanKouListener.msgQueue != null && ChuanKouListener.msgQueue.size() > 0) {
//                    // take() 取走BlockingQueue里排在首位的对象
//                    // 若BlockingQueue为空，阻断进入等待状态直到Blocking有新的对象被加入为止
//                    String msg = ChuanKouListener.msgQueue.take();
//                    System.out.println("队列里拿出的信息：" + msg);
//                    //从队列中拿出串口收到的信息！
//                }
//            }
        }  catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    public int SendData(String data){
        //echo数据
        byte[] dat = data.getBytes();
//                        dat[0] = (byte) (0x55);
//                        dat[1] = (byte) (0x31);
        try {
            sendToPort(serialPort, dat);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return 0;
    }
    public int SendDat(byte[] dat){

        try {
            sendToPort(serialPort, dat);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return 0;
    }
    public static void main(String[] args) {//可以当作一个启动类。
        Main main = new Main();
        try {
            main.init();
        } catch (Exception e) {
            e.printStackTrace();
        }
        main.run();
    }
}

